k8s 创建 serviceAccount 并测试其权限 | 您所在的位置:网站首页 › k8s serviceaccount token › k8s 创建 serviceAccount 并测试其权限 |
什么是 serviceAccount 顾名思义,相对于userAccount(比如:kubectl访问APIServer时用的就是userAccount),serviceAccount 就是 Pod 中的 Process 用于访问 Kubernetes API的 account,它为 Pod 中的进程提供了一种身份标识。相比于 userAccount 的全局性权限,serviceAccount 更适合一些轻量级的task,更聚焦于授权给某些特定Pod中的Process所使用。 serviceAccount 并不复杂,只是关联了一个 Secret 资源作为 token,该token也叫service-account-token。 任意一个 pod 如果在不指定 serviceAccount 的情况下,都是用的默认的 serviceAccount。相关内容在容器的 /run/secrets/kubernetes.io/serviceaccount 目录下。该目录下有三个文件:ca.crt,namespace,token。 ca.crt 用来验证 APIServer 的证书,因为证书都是自己生成的,所以需要创建集群 CA 证书进行验证。namespace 是该 pod 所在命名空间。token 是容器访问 APIServer 认证和授权所使用的内容,请求时放在 Authorization。接下来创建 serviceAccount 并进行权限的测试。 serviceAccount 实战1. 创建账号和角色sa-pod-reader.yaml apiVersion: v1 kind: ServiceAccount metadata: name: pod-reader namespace: dev --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-role namespace: dev rules: - apiGroups: [""] # 支持的API组列表,""空字符串,表示核心API群 resources: ["pods"] # 支持的资源对象列表 verbs: ["get","watch","list"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: authorization-role-binding namespace: dev subjects: - kind: ServiceAccount name: pod-reader roleRef: kind: Role name: pod-role apiGroup: rbac.authorization.k8s.io# 创建用户和角色 kubectl apply -f sa-pod-reader.yaml创建一个 pod-reader 的角色并和账号 pod-reader 进行绑定,pod-reader 的权限仅限于 dev 命名空间下 pod 的查询。 2. 创建 pod-reader 的 token在以前版本的 kubernetes 中,进行了创建 serviceaccount 会自动生成一个 Secret 里面存放 token 值,但是新版本不会这样做了。可以参考之前的文章 k8s 手动管理 ServiceAccount 的 Secret。 pod-reader-token.yaml apiVersion: v1 kind: Secret metadata: name: pod-reader namespace: dev annotations: kubernetes.io/service-account.name: pod-reader type: kubernetes.io/service-account-token# 创建 secret kubectl apply -f pod-reader-token.yaml3. 测试权限kubectl describe secret pod-reader -n dev获取到 token 以后,使用 postman 进行测试。 设置 token。 可以看见能够进行获取。 3.2 获取 default 下的 pod提示没有权限,至此,测试完毕。
|
CopyRight 2018-2019 实验室设备网 版权所有 |